StalactiteConfiguration.java
package org.codefilarete.stalactite.spring.autoconfigure;
import javax.sql.DataSource;
import org.codefilarete.stalactite.spring.transaction.StalactitePlatformTransactionManager;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionManager;
/**
* {@link Configuration} implementation for Stalactite.
*
* @author Guillaume Mary
*/
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(StalactiteProperties.class)
@ConditionalOnSingleCandidate(DataSource.class)
class StalactiteConfiguration {
private final DataSource dataSource;
StalactiteConfiguration(DataSource dataSource) {
this.dataSource = dataSource;
}
public DataSource getDataSource() {
return dataSource;
}
@Bean
@ConditionalOnMissingBean(TransactionManager.class)
public PlatformTransactionManager transactionManager(
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
StalactitePlatformTransactionManager transactionManager = new StalactitePlatformTransactionManager(getDataSource());
transactionManagerCustomizers.ifAvailable(customizers -> customizers.customize(transactionManager));
return transactionManager;
}
}